package designMode.templatePattern;

/**
 * @author LIBOFEI
 * @ClassName AbstractClass
 * @description  例子
 * @date 2020/6/26 15:09
 * @Version 1.0
 **/
public abstract class AbstractClass {


    final void templateMethod(){
        operation1();
        operation2();
        concreteOperation();
        hook();
    }
    /** *
     * 子类实现
     * @author LIBOFEI
     * @date 15:12 2020/6/26
     * @return void
     * @Version  1.0
    **/
    abstract void operation1();

    /** *
     * 子类实现
     * @author LIBOFEI
     * @date 15:12 2020/6/26
     * @return void
     * @Version  1.0
    **/
    abstract void operation2();

    /** *
     * 具体方法，定义在抽象类中。声明为final，子类无法覆盖，可以被模板方法使用也可以被子类使用
     * @author LIBOFEI
     * @date 15:12 2020/6/26
     * @return void
     * @Version  1.0
    **/
    final void concreteOperation(){

    }

    /** *
     * 钩子函数 具体方法，子类视情况要不要覆盖他们，
     * @author LIBOFEI
     * @date 15:13 2020/6/26
     * @return void
     * @Version  1.0
    **/
    void hook(){


    }
}
